main() {
  // 1. 定义购物车列表
  // dynamic 动态类型 什么类型都可以 就是any
  List<Map> goodsList = [
    {
      "id": 1,
      "price": 22.68,
      "count": 3,
      "goods_name": "西瓜",
      "selectd": true,
    },
    {
      "id": 2,
      "price": 11.99,
      "count": 3,
      "goods_name": "草莓",
      "selectd": true,
    },
    {
      "id": 3,
      "price": 60.99,
      "count": 1,
      "goods_name": "车厘子",
      "selectd": false,
    },
    {
      "id": 4,
      "price": 11.68,
      "count": 3,
      "goods_name": "平谷大桃",
      "selectd": false,
    }
  ];

  // 2. 计算商品的总金额
  // 2.1 for
  double totalPrice1 = 0;
  for (var i = 0; i < goodsList.length; i++) {
    if (goodsList[i]['selectd']) {
      totalPrice1 += goodsList[i]['price'] * goodsList[i]['count'];
    }
  }
  print('商品的总金额为：$totalPrice1');
  print('商品的总金额为：${totalPrice1.toStringAsFixed(2)}');

  // 2.2 for in
  double totalPrice2 = 0;
  for (var item in goodsList) {
    if (item['selectd']) {
      totalPrice2 += item['price'] * item['count'];
    }
  }
  print('商品的总金额为：$totalPrice2');
  print('商品的总金额为：${totalPrice2.toStringAsFixed(2)}');

  // 2.3 forEach
  double totalPrice3 = 0;
  goodsList.forEach((item) {
    if (item['selectd']) {
      totalPrice3 += item['price'] * item['count'];
    }
  });
  print('商品的总金额为：$totalPrice3');
  print('商品的总金额为：${totalPrice3.toStringAsFixed(2)}');

   double allValue = goodsList.where((item) => item["selectd"]).fold(
      0.0, (value, element) => value + element["count"] * element["price"]);
  print('商品的总金额为：$allValue');
  print('商品的总金额为：${allValue.toStringAsFixed(2)}');

  // where筛选出选中的，map返回单价*价格的没一个元素的总价格数组，reduce求和，算出所有的总价
  double allValue1 = goodsList
  .where((item) => item['selectd']).map((item) => item['price'] * item['count'])
  .reduce((value, element) => value + element);
  print('商品的总金额为：$allValue1');
  print('商品的总金额为：${allValue1.toStringAsFixed(2)}');

  // fold相对于前端鸿蒙的reduce方法
  // List中fold 和reduce 方法 都是累加计算 但是fold有初始值
  // 筛选所有的选中的商品
  double allValue2 = goodsList.fold(0, (value, element) {
    if (element['selectd']) {
      return value + element['price'] * element['count'];
    }
    return value;
  });
  print('商品的总金额为：$allValue2');
  print('商品的总金额为：${allValue2.toStringAsFixed(2)}');

}
